package br.com.syswill.boaviagem;

import java.util.Calendar;

import br.com.syswill.boaviagem.dao.GastoDAO;
import br.com.syswill.boaviagem.domain.Gasto;
import br.com.syswill.boaviagem.domain.Viagem;
import br.com.syswill.boaviagem.util.Constantes;
import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.DatePickerDialog.OnDateSetListener;
import android.app.Dialog;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;

public class GastoActivity extends Activity {
	private int ano, mes, dia;
	private Button dataGasto;
	private Calendar dataGastoCalendar;
	private Long idViagem;
	private GastoDAO gastoDAO;
	private Long id;
	private EditText descricao,local,valor;
	private Spinner categoria;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.novo_gasto);
		gastoDAO = new GastoDAO(this);
		// Busca data atual para prencher botao
		Calendar calendar = Calendar.getInstance();
		ano = calendar.get(Calendar.YEAR);
		mes = calendar.get(Calendar.MONTH);
		dia = calendar.get(Calendar.DAY_OF_MONTH);
		dataGasto = (Button) findViewById(R.id.data);
		dataGasto.setText(dia + "/" + (mes + 1) + "/" + ano);
		dataGastoCalendar = Calendar.getInstance();
		dataGastoCalendar.set(ano, mes, dia);
		
		descricao = (EditText) findViewById(R.id.descricao);
		local = (EditText) findViewById(R.id.local);
		valor = (EditText) findViewById(R.id.valor);
		
		
		idViagem = getIntent().getLongExtra(Constantes.VIAGEM_SELECIONADA,-1);
		
		// Busca lista para colocar no spner
		ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
				this, R.array.categoria_gasto,
				android.R.layout.simple_spinner_item);
		categoria = (Spinner) findViewById(R.id.categoria);
		categoria.setAdapter(adapter);
		
		id = getIntent().getLongExtra(Constantes.GASTO_SELECIONADO, -1);
		
		if (id != -1) {
			prepararEdicao();
		}
	}
	
	private void prepararEdicao() {
		Gasto gasto = (Gasto) getIntent()
		.getSerializableExtra(Constantes.GASTO_SELECIONADO);
		//categoria.setSelection(position);
		descricao.setText(gasto.getDescricao());
		local.setText(gasto.getLocal());
		}

	public void selecionarData(View view) {
		showDialog(view.getId());
	}

	@Override
	protected Dialog onCreateDialog(int id) {
		if (R.id.data == id) {
			return new DatePickerDialog(this, listener, ano, mes, dia);
		}
		return null;
	}

	private OnDateSetListener listener = new OnDateSetListener() {
		@Override
		public void onDateSet(DatePicker view, int year, int monthOfYear,
				int dayOfMonth) {
			ano = year;
			mes = monthOfYear;
			dia = dayOfMonth;
			dataGasto.setText(dia + "/" + (mes + 1) + "/" + ano);
			dataGastoCalendar.set(ano, mes, dia);
		}
	};
	
public void salvarGasto(View view) {
		
		Gasto gasto = new Gasto();
	
		gasto.setData(dataGastoCalendar.getTime());
		gasto.setDescricao(descricao.getText().toString());
		gasto.setLocal(local.getText().toString());
		gasto.setValor(new Double(valor.getText().toString()));
		gasto.setViagemId(idViagem);
		gasto.setCategoria( categoria.getSelectedItem().toString());
		
		long resultado;

		if (id == -1) {
			resultado = gastoDAO.inserir(gasto);
		} else {
			gasto.setId(id);
			resultado = gastoDAO.atualizar(gasto);
		}
		if (resultado != -1) {
			Toast.makeText(this, getString(R.string.registro_salvo),
					Toast.LENGTH_SHORT).show();
			startActivity(new Intent(this, ViagemListActivity.class));
		} else {
			Toast.makeText(this, getString(R.string.erro_salvar),
					Toast.LENGTH_SHORT).show();
		}
	}

	@Override
	protected void onDestroy() {
		gastoDAO.close();
		super.onDestroy();
	}
}